package Calculadora;
import java.util.Vector;
/***************************************************************
 *  StackVector.java        
 *  Fecha: 17/07/12
 *  Carnet: 11033
 *  @param <E> Tipo de Objeto a Almacenar en la Pila.
 *  @author Juan Pablo Argueta Cortes
 *  Clase que construye una Pila con uso de Genéricos en la 
 *  implementación de un Vector.
 ***************************************************************/
public class StackVector<E> implements Stack<E> {

    protected Vector<E> data;
    
    
    /**
     * Construye una Pila nueva.
     */
    public StackVector()
    // post: Constructs a new, empty stack
    {
        data = new Vector<E>();
    }
    
    /**
     * Introduce un item a la Pila.
     * @param item Elemento a Ingresar
     */
    public void push(E item)
    // pre: 
    // post: Item is added to stack
    //       will be popped next if no intervening push
    {
        data.add(item);
    }
    
    /**
     * Devuelve y remueve el último elemento ingresado en la Pila.
     * @return
     */
    public E pop()
    // pre: stack is not empty
    // post: most recently pushed item is removed and returned
    {
        if (!this.empty()){
            return data.remove(size()-1);
        } else {
            return null;
        }  
    }

    /**
     * Devuelve el último elemento ingresado en la Pila.
     * @return
     */
    public E peek()
    // pre: stack is not empty
    // post: top value (next to be popped) is returned
    {
        if (!this.empty()){
            return data.get(size()-1);
        } else {
            return null;
        } 
    }   
    
    /**
     * Devuelve True si la Pila esta vacía, False de lo contrario.
     * @return
     */
    public boolean empty()
    // post: returns true if and only if the stack is empty
    {
        return data.isEmpty();
    }
    
    /**
     * Devuelve el tamaño de la Pila.
     * @return
     */
    public int size()
    // post: returns the number of elements in the stack
    {
        return data.size();
    }
}
